﻿@page "/Admin/Tasks"

@using Pangeo.Admin.Models
@using BlazorAdmin.Models

<div class="tab-scroll-body">
    <Card IsCollapsible="true" HeaderText="任务介绍" class="mb-3">
        <BodyTemplate>
            <Alert class="mb-0">
                <h5 class="font-weight-bold" style="margin: 0; color: red;">注意：使用IIS部署时，需将IIS回收[固定时间间隔(分钟)]设置成0，否则IIS在无请求的情况下，达到默认空闲时间会回收资源，导致后台定时任务无法执行</h5>
            </Alert>
        </BodyTemplate>
    </Card>
    <AdminTable TItem=Job OnQueryAsync="OnQueryAsync" OnSaveAsync="OnSaveAsync" OnDeleteAsync="OnDeleteAsync" ExtendButtonColumnWidth="265">
        <TableColumns>
            <TableColumn @bind-Field="context.JobName" Filterable="true" Searchable="true" Sortable="true" />
            <TableColumn @bind-Field="context.CronExpress" Filterable="true" Searchable="true" Sortable="true" />
            <TableColumn @bind-Field="context.LastExecTime" Filterable="true" Searchable="true" Sortable="true" />
            <TableColumn @bind-Field="@context.LastExecResult" Sortable="true" Filterable="true" Searchable="true">
                <Template Context="v">
                    <Tag Color="GetResultColor(v.Value)">@FormatResult(v.Value)</Tag>
                </Template>
            </TableColumn>
            <TableColumn @bind-Field="context.NextExecTime" Filterable="true" Searchable="true" Sortable="true" />
            <TableColumn @bind-Field="@context.Status" Sortable="true" Filterable="true" Searchable="true">
                <Template Context="v">
                    <Tag Color="GetStatusColor(v.Value)" Icon="@GetStatusIcon(v.Value)">@FormatStatus(v.Value)</Tag>
                </Template>
            </TableColumn>
            <TableColumn @bind-Field="context.Updater" Filterable="true" Searchable="true" Sortable="true" />
            <TableColumn @bind-Field="context.UpdateTime" Filterable="true" Searchable="true" Sortable="true" />
        </TableColumns>
        <EditTemplate>
            <JobEdit @bind-Value="context" />
        </EditTemplate>
        <RowButtonTemplate>
            <TableCellButton Size="Size.ExtraSmall" Color="Color.Warning" Icon="fa-solid fa-pause-circle" Text="暂停" OnClick="() => OnPause(context)" IsShow="OnCheckTaskStatus(context)" AutoRenderTableWhenClick="true" />
            <TableCellButton Size="Size.ExtraSmall" Color="Color.Success" Icon="fa-solid fa-play-circle" Text="运行" OnClick="() => OnRun(context)" IsShow="OnCheckTaskStatus(context)" AutoRenderTableWhenClick="true" />
            <TableCellButton Size="Size.ExtraSmall" Color="Color.Info" Icon="fa-solid fa-info-circle" Text="日志" OnClick="() => OnLog(context)" IsShow="OnCheckTaskStatus(context)" AutoRenderTableWhenClick="true" />
        </RowButtonTemplate>
    </AdminTable>
    <Card IsCollapsible="true" HeaderText="任务介绍" class="mb-3">
        <BodyTemplate>
            <Alert class="mb-0">
                <h6 class="font-weight-bold">秒(0~59)  分‌(0~59)  小时(0~23)  日期(1~31)  月份(1~12)  星期‌(0~6, 星期日为0)  年份‌(1970~2099)</h6>
                <p>
                    星号（*）‌：表示匹配该域的任意值<br>
                    问号（?）‌：表示未说明的值，仅用于日期和星期字段中<br>
                    减号（-）‌：表示一个指定的范围<br>
                    正斜杠（/）‌：表示起始时间开始触发，然后每隔固定时间触发一次<br>
                    ‌逗号（,）‌：表示列出枚举值<br>
                    ‌L‌：表示“最后”，只能出现在日期和星期字段中<br>
                    W‌：表示最近的工作日<br>
                    ‌C‌：表示“当前”值<br>
                    #‌：用于确定“第几个星期几”<br>
                </p>
                <p>
                    常用Crow表达式：<br>
                    0 0 8 * * * 表示每天上午8点执行任务<br>
                    0 0/30 9-17 * * * 表示在每天9点到17点之间，每隔30分钟执行一次任务<br>
                    0 0 12 ? * WED 表示每周三中午12点执行任务<br>
                    0 0 10 L * ? 表示每个月的最后一天上午10点执行任务<br>
                    0 0 3-5 * * * 表示每天凌晨3点到5点之间，每小时执行一次任务<br>
                    0 15 10 L * ? 表示每个月的最后一天上午10:15分执行任务
                </p>
            </Alert>
        </BodyTemplate>
    </Card>
</div>